package lhglogger

import (
	"fmt"
	"time"
)

/*
往终端写日志相关内容
*/
// Logger 自定义日志结构体
type ConsoleLogger struct {
	Level LogLevel //日志级别
}

// 验证level级别的日志是否记录 true:要记录 false:不记录
func (l ConsoleLogger) enable(level LogLevel) bool {
	return l.Level <= level
}

//封装直接输入日志的方法
func (l ConsoleLogger) printLog(level LogLevel, format string, a ...interface{}) {

	if l.enable(level) {
		msg := fmt.Sprintf(format, a...)
		now := time.Now()
		//注意：这里为啥传3，是因为最终在使用时 我要记录的是 调用当前Debug()的那行代码的位置
		funcName, fileName, lineNo := getInfo(3)
		levelstr := parseLevelToStr(level)
		fmt.Printf("[%s] [%v] %s [%s %d行 %s ]\n", now.Format("2006-01-02 15:04:05"), levelstr, msg, fileName, lineNo, funcName)
	}
}

// Debug级别 msg 可以支持格式化
func (l ConsoleLogger) Debug(format string, a ...interface{}) {
	l.printLog(DEBUG, format, a...)
}

// Info级别
func (l ConsoleLogger) Info(format string, a ...interface{}) {
	// if l.enable(INFO) {
	// 	now := time.Now()
	// 	fmt.Printf("[%s] [Info] %s\n", now.Format("2006-01-02 15:04:05"), msg)
	// }
	l.printLog(INFO, format, a...)
}

// Werning级别
func (l ConsoleLogger) Warning(format string, a ...interface{}) {
	l.printLog(WARNING, format, a...)
}

// Error级别
func (l ConsoleLogger) Error(format string, a ...interface{}) {

	l.printLog(ERROR, format, a...)
}

// Fatal级别
func (l ConsoleLogger) Fatal(format string, a ...interface{}) {
	l.printLog(FATAL, format, a...)
}
